/**
 * 环境变量工具函数
 */

// 获取环境变量
export const getEnv = (key: keyof ImportMetaEnv, defaultValue = ''): string => {
  return (import.meta.env[key] as string) || defaultValue
}

// 获取布尔类型环境变量
export const getBooleanEnv = (
  key: keyof ImportMetaEnv,
  defaultValue = false
): boolean => {
  const value = getEnv(key)
  if (!value) return defaultValue
  return value === 'true' || value === '1'
}

// 获取数字类型环境变量
export const getNumberEnv = (
  key: keyof ImportMetaEnv,
  defaultValue = 0
): number => {
  const value = getEnv(key)
  const num = parseInt(value, 10)
  return isNaN(num) ? defaultValue : num
}

// 获取数组类型环境变量（逗号分隔）
export const getArrayEnv = (
  key: keyof ImportMetaEnv,
  defaultValue: string[] = []
): string[] => {
  const value = getEnv(key)
  return value ? value.split(',').map(item => item.trim()) : defaultValue
}

// 常用环境变量快捷访问
export const env = {
  // 应用信息
  APP_TITLE: getEnv('VITE_APP_TITLE', 'ggzx-admin'),
  APP_VERSION: getEnv('VITE_APP_VERSION', '0.0.0'),
  APP_ENV: getEnv('VITE_APP_ENV', 'development'),
  APP_DEBUG: getBooleanEnv('VITE_APP_DEBUG', false),

  // API 配置
  API_BASE_URL: getEnv('VITE_API_BASE_URL', 'http://localhost:3000/api'),
  API_TIMEOUT: getNumberEnv('VITE_API_TIMEOUT', 10000),

  // 第三方服务
  GITHUB_CLIENT_ID: getEnv('VITE_GITHUB_CLIENT_ID'),
  GOOGLE_CLIENT_ID: getEnv('VITE_GOOGLE_CLIENT_ID'),

  // 数据库配置
  DB_HOST: getEnv('VITE_DB_HOST', 'localhost'),
  DB_PORT: getNumberEnv('VITE_DB_PORT', 5432),
  DB_NAME: getEnv('VITE_DB_NAME', 'ggzx_admin'),

  // 认证配置
  JWT_SECRET: getEnv('VITE_JWT_SECRET'),
  TOKEN_EXPIRES_IN: getEnv('VITE_TOKEN_EXPIRES_IN', '7d'),

  // 文件上传配置
  UPLOAD_MAX_SIZE: getNumberEnv('VITE_UPLOAD_MAX_SIZE', 10485760), // 10MB
  UPLOAD_ALLOWED_TYPES: getArrayEnv('VITE_UPLOAD_ALLOWED_TYPES', [
    'image/jpeg',
    'image/png',
    'image/gif'
  ]),

  // 日志配置
  LOG_LEVEL: getEnv('VITE_LOG_LEVEL', 'info')
} as const

// 判断当前环境
export const isDevelopment =
  env.APP_ENV === 'development' || env.APP_ENV === 'dev'
export const isProduction =
  env.APP_ENV === 'production' || env.APP_ENV === 'prod'
export const isTest = env.APP_ENV === 'test'

// 获取当前环境模式
export const getCurrentMode = (): string => {
  return import.meta.env.MODE || 'dev'
}

// 根据环境文件命名获取环境类型
export const getEnvType = (): 'dev' | 'prod' | 'test' => {
  const mode = getCurrentMode()
  // 支持标准命名和非标准命名
  if (mode === 'production' || mode === 'prod') return 'prod'
  if (mode === 'test') return 'test'
  return 'dev' // 默认或 development/dev
}

// 调试日志
export const debugLog = (...args: unknown[]) => {
  if (env.APP_DEBUG) {
    console.log('[DEBUG]', ...args)
  }
}
